#include "wontec_485.h"
#include "string.h"
#include "stdio.h"
#include <sys/ipc.h>
#include <sys/msg.h>
#include "../msg_def.h"
#include "wontec_wt184.h"
#include <stdlib.h>

#define WONTEC_CMD_FILE "wontec_cmd.txt"

// int main(int argc, char * argv[])
// {
//     wontec_485_frame frameContent;
//     unsigned char data[20] = "name";

//     unsigned char lenRet;
//     unsigned char dataBuffRet[MAX_WT_BUFF_LEN];

//     frameContent.func_code = 0x58;
//     frameContent.slave_addrH = '0';
//     frameContent.slave_addrL = '1';

//     frameContent.dataLen = 0;

//     //memcpy(frameContent.data,data,4);

//     frameContent.data = data;

//     wontec_frame_serialize(&frameContent,dataBuffRet,&lenRet);


//     printf("lenOut:%d\n",lenRet);

//     dataBuffRet[lenRet] = '\0';
//     for(int i=0;i<lenRet;i++)
//     {
//         printf("%02x,",dataBuffRet[i]);
//     }

//     printf("\n");  


// }


int main(int argc, char * argv[])
{
    FILE * fp = NULL;
    wontec_queue_msg wtQueueMsg;
    memset(&wtQueueMsg,0,sizeof(wontec_queue_msg));

    if(argc<2)
    {
        fp = fopen(WONTEC_CMD_FILE,"r");       

    }
    else
    {
        fp = fopen(argv[1],"r");
    }
    if(fp!=NULL)
    {
        char StrLine[256];
        char * tmpPtr = NULL;
        while(!feof(fp))
        {
            memset(StrLine,0,256);
            fgets(StrLine,256,fp);
            if(strstr(StrLine,"func"))
            {
                char funcCode = 0;
                tmpPtr = StrLine+5;
                funcCode = atoi(tmpPtr);
                wtQueueMsg.wontecMsg.funcCode = funcCode;
            } 

            if(strstr(StrLine,"sub_addr"))
            {
                tmpPtr = StrLine+9;
                wtQueueMsg.wontecMsg.tarDev = atoi(tmpPtr);
            } 

            if(strstr(StrLine,"data"))
            {
                tmpPtr = StrLine+5;
                int tempLen = strlen(tmpPtr);
                if(tmpPtr[tempLen-1]==0x0a)
                {
                   tmpPtr[tempLen-1] = 0x00;
                   tempLen --;
                }
                tempLen = tempLen>50?50:tempLen;
                memset(wtQueueMsg.wontecMsg.paramData,0,50);

                memcpy(wtQueueMsg.wontecMsg.paramData,tmpPtr,tempLen);
                wtQueueMsg.wontecMsg.paramLen = tempLen;
            }        

        }
    }

    key_t key = ftok(msgQueueKeyPath, 0x1234);
    if(key < 0)
    {
        perror("ftok");
        printf("%s\n",msgQueueKeyPath);
        return -1;
    }

    int msg_id = msgget(key, IPC_CREAT|0600);//IPC_CREAT|0600
    if(msg_id < 0)
    {
        perror("msgget");
        return -1;
    }
  
    
    
    wtQueueMsg.type = QUEUE_MSG_TYPE_RS485;

    //wtQueueMsg.wontecMsg.tarDev = WONTEC_WT184;
    //wtQueueMsg.wontecMsg.funcCode = RESET_ACTION;


    if(msgsnd(msg_id, (void*)&wtQueueMsg, sizeof(wontec_msg_def), 0) < 0)
    {
        perror("msgsnd");
        return -1;
    }
    else
    {
        /* code */
        printf("msg send success,type is %d,funcCode[%d]\n",wtQueueMsg.type,wtQueueMsg.wontecMsg.funcCode);
    }

}
// #define CRC_DATA_FILE "crc_data.txt"

// int main(int argc, char * argv[])
// {
//     FILE * fp = NULL;
//     wontec_queue_msg wtQueueMsg;
//     memset(&wtQueueMsg,0,sizeof(wontec_queue_msg));

//     if(argc<2)
//     {
//         fp = fopen(CRC_DATA_FILE,"r");       

//     }
//     else
//     {
//         fp = fopen(argv[1],"r");
//     }

//     if(fp!=NULL)
//     {
//         char StrLine[256];
//         char * tmpPtr = NULL;

//         char dataRead[1024];
//         memset(dataRead,0,1024*sizeof(char));
//         int lenOut = 0;
//         while(!feof(fp))
//         {
//             memset(StrLine,0,256);
//             fgets(StrLine,256,fp);
//             tmpPtr = StrLine;
//             int lenAll = strlen(StrLine);
//             int lenLeft = lenAll;
            
//             int tempData = 0;
//             while(lenLeft>=3)
//             {
//                sscanf(tmpPtr,"%02x",&tempData);
//                dataRead[lenOut++] = (char)tempData; 

//                lenLeft-=3;
//                tmpPtr +=3;           

//             }     

//         }

//         printf("data from file:\n");
//         int i=0;
//         for(i=0;i<lenOut;i++)
//         {
//             printf("0x%02x,",dataRead[i]);
//             if(i%5==4)
//             {
//                 printf("\n");
//             }
//         }

//         if(i%5!=0)
//         {
//            printf("\n");
//         }

//         unsigned short crcValue = cal_crc((unsigned char *)dataRead,lenOut);
//         printf("crc result:0x%04x\n",crcValue);
//     }

// }


